﻿Imports FSUIPC

Module funcSub
    Private priPathFlt As String = System.AppDomain.CurrentDomain.BaseDirectory & "BBox.FLT"
    ' * @link http://evna.vawiki.org
    ' * @ CESAR: Funcion de conexion al server EVNA. Devuelve True todo correcto
    Public Function loginMVS(ByVal piloto, ByVal password, ByVal url)
        Try
            If piloto = "" Or password = "" Then
                MsgBox("Se ha producido un error de autentificación en el Servidor EVNA" & Environment.NewLine & Environment.NewLine & "Desconecte On/Off (botón principal izquierda)" & Environment.NewLine & "Compruebe Usuario y/o Password en CONFIG" & Environment.NewLine & _
                       "Si tiene los datos correctos contacte con Administración", MsgBoxStyle.Information, "Error de autentificación en EVNA")

                Return False
            End If
            url += "/action.php/mvs_bbox"

            If hechoLogin Then Return True

            Const cadenaXML As String = "<?xml version=""1.0"" encoding='UTF-8'?>" & "<login>" & "<data>" & "</data>" & "<pilotID>" & "</pilotID>" & "<password>" & "</password>" & "<lat>" & "</lat>" & "<lon>" & "</lon>" & "</login>"



            Dim distancia As Double = 0
            parser = New MSXML2.DOMDocument
            ' cargar el código SOAP para CaF
            parser.loadXML(cadenaXML)


            parser.selectSingleNode("/login/data").text = "verify"
            parser.selectSingleNode("/login/pilotID").text = piloto
            parser.selectSingleNode("/login/password").text = password
            parser.selectSingleNode("/login/lat").text = lat.ToString
            parser.selectSingleNode("/login/lon").text = lon.ToString
            frmPrincipal.lstEventos.Items.Add("Realizando Login en EVNA")
            frmPrincipal.lstEventos.Items.Add("Espere...")
            frmPrincipal.lstEventos.Refresh()



            oHttReq = New MSXML2.XMLHTTP
            '
            ' Enviar el comando de forma síncrona (se espera a que se reciba la respuesta)
            oHttReq.open("POST", url, False)
            ' las cabeceras a enviar al servicio Web
            ' (no incluir los dos puntos en el nombre de la cabecera)
            oHttReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8")
            oHttReq.setRequestHeader("SOAPAction", "http://evna.vawiki.org")
            ' enviar el comando
            oHttReq.send(parser.xml)



            ' Poner los datos en el analizador de XML
            parser.loadXML(oHttReq.responseText)
            frmPrincipal.lstEventos.Items.Clear()
            'Este debe de ser el texto recibido para login correcto <sitedata><info><loginStatus>1</loginStatus></info></sitedata>
            If parser.selectSingleNode("/sitedata/info/loginStatus").text = "0" Then
                frmPrincipal.lstEventos.Items.Add(piloto & " No existe")
                frmPrincipal.lblPiloto.ForeColor = System.Drawing.Color.Red
                frmPrincipal.lblPiloto.Text = cnfPiloto
            Else
                frmPrincipal.lstEventos.Items.Add("Acceso correcto como " & piloto)
                frmPrincipal.lblPiloto.ForeColor = System.Drawing.Color.LimeGreen
                frmPrincipal.lblPiloto.Text = cnfPiloto
            End If
            frmPrincipal.lblPiloto.Refresh()
            ' Comprobamos si hay reserva para el dia de la semana
            If parser.selectSingleNode("/sitedata/info/reservaEstado").text = "1" Then
                Dim diassemana As String = ""
                Dim ahora As Date = (Format(Date.UtcNow, "d"))
                Dim numdiasemana As Integer = ahora.DayOfWeek
                diassemana = parser.selectSingleNode("/sitedata/info/diasSemana").text
                If InStr(diassemana, numdiasemana.ToString) = 0 Or Int(Val(parser.selectSingleNode("/sitedata/info/distancia").text) + 0.5) > 5 Then
                    parser.selectSingleNode("/sitedata/info/reservaEstado").text = "0"
                End If

            End If

            If parser.selectSingleNode("/sitedata/info/reservaEstado").text = "0" Then
                frmPrincipal.pbLedFP.Image = Global.MVSBBoxNETFSX.Resources.ledapagado
                conReserva = False
                frmPrincipal.lstEventos.ForeColor = Color.DarkOrange
                frmPrincipal.lstEventos.Items.Add(piloto & " No hay Plan de Vuelo Pendiente")
                frmPrincipal.lstEventos.Items.Add("No se generará Informe de vuelo en EVNA")
                frmPrincipal.lstEventos.Items.Add("Si podrá enviar al final del vuelo reporte a IVAO")
                pax = 1

                fueling = IIf(modoDesarrollo, fuelMax, 0)
                fuelprice = 1
                frmPrincipal.lstEventos.Items.Add("Pax   : " & pax)
                frmPrincipal.lstEventos.Items.Add("Precio fuel   : $" & fuelprice.ToString & " Kg.")
            Else 'HAY RESERVA

                conReserva = True
                frmPrincipal.pbLedFP.Image = Global.MVSBBoxNETFSX.Resources.ledverde
                flightNumber = parser.selectSingleNode("/sitedata/info/numRuta").text

                depICAO = parser.selectSingleNode("/sitedata/info/depicao").text

                arrICAO = parser.selectSingleNode("/sitedata/info/arricao").text

                aircraftIcao = parser.selectSingleNode("/sitedata/info/aircraftIcao").text

                registro = parser.selectSingleNode("/sitedata/info/registration").text

                depTime = parser.selectSingleNode("/sitedata/info/deptime").text

                route = parser.selectSingleNode("/sitedata/info/ruta").text

                pax = Val(parser.selectSingleNode("/sitedata/info/persons").text)



                frmFP.Label1.Text = registro
                frmFP.Label2.Text = parser.selectSingleNode("/sitedata/info/rules").text.Substring(0, 1)
                frmFP.Label3.Text = parser.selectSingleNode("/sitedata/info/tipovuelo").text
                frmFP.Label4.Text = flightNumber.Substring(3)
                frmFP.Label5.Text = aircraftIcao
                frmFP.Label6.Text = parser.selectSingleNode("/sitedata/info/wtc").text
                frmFP.Label7.Text = parser.selectSingleNode("/sitedata/info/equipment").text
                frmFP.Label8.Text = parser.selectSingleNode("/sitedata/info/equipment2").text
                frmFP.Label9.Text = depICAO
                frmFP.Label10.Text = depTime
                frmFP.Label11.Text = parser.selectSingleNode("/sitedata/info/speed").text
                frmFP.Label12.Text = parser.selectSingleNode("/sitedata/info/level").text
                frmFP.Label13.Text = route
                frmFP.Label14.Text = arrICAO
                frmFP.Label15.Text = parser.selectSingleNode("/sitedata/info/eet").text.Substring(0, 5)
                frmFP.Label16.Text = parser.selectSingleNode("/sitedata/info/alternativo").text
                frmFP.Label17.Text = parser.selectSingleNode("/sitedata/info/endurance").text.Substring(0, 5)
                frmFP.Label18.Text = pax.ToString
                frmFP.Label19.Text = parser.selectSingleNode("/sitedata/info/fullname").text
                frmFP.Label21.Text = parser.selectSingleNode("/sitedata/info/pilotname").text & " (" & piloto & ")"





                combustibleAnteriorEvna = parser.selectSingleNode("/sitedata/info/combustible").text
                frmPrincipal.ListPruebas.Items.Add("Combustible Anterior   : " & combustibleAnteriorEvna)
                fueling = combustibleAnteriorEvna
                frmPrincipal.lblFuelActual.Text = fueling.ToString("0,0")
                fuelprice = Val(parser.selectSingleNode("/sitedata/info/fuelprice").text) 'precio del Galón
                fuelprice = Format(fuelprice / 2.6704, "00.00") ' convertimos el precio por Kilo de combustible
                frmPrincipal.ListPruebas.Items.Add("Precio fuel   : $" & fuelprice.ToString & " Kg.")
            End If
            ' CESAR: Independientementen si no hay login and/or no hay plan de vuelo





            frmPrincipal.Timer1.Enabled = False
            configuracionAeronave()
            If fueling > fuelMax Then fueling = fuelMax
            If modoDesarrollo = False Then
                fuelacero()
                cargafuel() 'trabaja con el fuel anterior A/C EVNA en variable fueling
                fsMensaje.Value = "A/C con " & fueling.ToString("0") & " Kg. de Combustible"
                FSUIPCConnection.Process("fsMensaje")
                fsMensajeSet.Value = 1
                fsMensajeSet.Value = 5
                My.Computer.Audio.Play(My.Application.Info.DirectoryPath & "\ding.wav", AudioPlayMode.Background)
            End If
            calculapeso()
            frmPrincipal.Timer1.Enabled = True
            frmPrincipal.upFueling.Enabled = True
            If modoDesarrollo = False Then
                frmPrincipal.upFueling.Maximum = fuelMax - combustibleAnteriorEvna
                frmPrincipal.upFueling.Minimum = 0
                frmPrincipal.upFueling.Increment = 50
                frmPrincipal.upFueling.Value = 0
                frmPrincipal.upFueling.ForeColor = Color.Red

            Else
                frmPrincipal.picLoadFuel_Click(frmPrincipal, Nothing)
                frmPrincipal.upFueling.Enabled = False
            End If
            ' frmPrincipal.picLoadFuel.Enabled = True


            hechoLogin = True
            Return True
        Catch ex As Exception
            frmPrincipal.lstEventos.Items.Clear()
            frmPrincipal.lstEventos.Items.Add("Se ha producido error: " & Err.Number.ToString & " al intentar conectar con " & url)
            frmPrincipal.lstEventos.Items.Add("al intentar conectar con " & url)
            frmPrincipal.lstEventos.Items.Add("Compruebe en CONFIGURACION parámetros de Piloto y URL de conexión")
            frmPrincipal.lstEventos.Items.Add("Si continua con problemas, contacte con los Administradores")
            MsgBox("Problema al conectar con " & url, MsgBoxStyle.Critical)
            Return False
        End Try

    End Function

    ''' <summary>
    ''' Configuracion aeronave
    ''' </summary>
    ''' <remarks>sin remarks</remarks>
    Public Sub configuracionAeronave()
        '/*CESAR: aircraftIcao = Modelo ICAO de aeronave obtenida de plan de vuelo EVNA
        'Dim latText As String, lonText As String, altText As String, hdgText As String
        'Dim lastLat As Double, lastLon As Double, lastAltitud As Double, lastHeading As Double
        'Dim tmp As String, tmp3 As Integer
        'Dim dst As Integer = (DateTime.Now - DateTime.UtcNow).Hours 'Day Saving Time diferencia horas
        Try
            'lastLat = lat.ToString : lastLon = lon.ToString : lastAltitud = altitude.ToString : lastHeading = heading.ToString
            'If (Math.Sign(lastLat) > 0) Then tmp = "N" Else tmp = "S"
            'tmp = tmp & (Math.Sign(Fix(lastLat)) * Fix(lastLat)).ToString("000") & "° "
            'Aux = (lastLat - Fix(lastLat)) * 60
            'tmp = tmp & Math.Abs(Aux).ToString("00.00") & "'"
            'latText = tmp

            'If (Math.Sign(lastLon) > 0) Then tmp = "E" Else tmp = "W"
            'tmp = tmp & Format((Math.Sign(Fix(lastLon)) * Fix(lastLon)), "000") & "° "
            'Aux = (Math.Sign(lastLon) * (lastLon - Fix(lastLon))) * 60
            'tmp = tmp & Format(Math.Abs(Aux), "00.00") & "'"
            'lonText = tmp
            'If (Math.Sign(lastAltitud)) > 0 Then tmp = "+" Else tmp = "-"
            'altText = tmp & lastAltitud.ToString("000000.00")
            'hdgText = lastHeading.ToString

            FSUIPCConnection.Process("AtcAircraft")
            ' ICAO del aircraft segun FSUIPC
            Dim strAtcModelo As String = fsAtcAircraft.Value.ToString

            FSUIPCConnection.Process("AircraftName")
            ' Nombre del aircraft segun FSUIPC
            Dim strAircraftName As String = fsAircraftName.Value.ToString
            If strAtcModelo = "" Then strAtcModelo = strAircraftName
            'Aqui comenzamos a parametrizar archivo FLT para posicionar
            'Aeronave en ultima localizacion
            If hechoFueling = False Then
                FSUIPCConnection.Process()
                'Capacidad obtenida en US Gallons
                Capacidad(0) = fsFuelCenterCapacidad.Value
                Capacidad(1) = fsFuelLeftMainCapacidad.Value
                Capacidad(2) = fsFuelRightMainCapacidad.Value
                Capacidad(3) = fsFuelLeftAuxCapacidad.Value
                Capacidad(4) = fsFuelRightAuxCapacidad.Value
                Capacidad(5) = fsFuelLeftTipCapacidad.Value
                Capacidad(6) = fsFuelRightTipCapacidad.Value
                Capacidad(7) = fsFuelCenter2Capacidad.Value
                Capacidad(8) = fsFuelCenter3Capacidad.Value
                Capacidad(9) = fsFuelExternal1Capacidad.Value
                Capacidad(10) = fsFuelExternal2Capacidad.Value

                fuelMax = 0
                For tmp3 = 0 To 10
                    fuelMax += Capacidad(tmp3)
                Next
                fuelMax = (fsFuelWeight.Value / 256) * fuelMax * 0.45359237D 'para pasar a Lbs (libras) y a Kg
                frmPrincipal.datFuelMax.Text = fuelMax.ToString("0")
                'frmPrincipal.lblCombustibleInicial.Text = fuelTotal.ToString("0") 'COMBUSTIBLE INICIAL
                Exit Sub
            End If

            Dim deposito(11) As String
            deposito(0) = "Center"
            deposito(1) = "LeftMain"
            deposito(2) = "RightMain"
            deposito(3) = "LeftAux"
            deposito(4) = "RightAux"
            deposito(5) = "LeftTip"
            deposito(6) = "RightTip"
            deposito(7) = "Center 2"
            deposito(8) = "Center 3"
            deposito(9) = "External 1"
            deposito(10) = "External 2"

            funcSub.cargafuel()




            '**********************************************
            'CESAR: Calculo de dia mes año, hora minutos y segundos LT y UTC escritura en FLT segun hora de salida del vuelo menos 25 minutos.
            'Dim objIniFile As New IniFile(priPathFlt)
            'objIniFile.WriteString("Main", "Description", aircraftIcao & " Fecha/Hora " & DateAndTime.Now.ToString("G"))
            'objIniFile.WriteString("Plane.0", "Aircraft", strAircraftName)
            'If depTime <> "" Then
            '    horaUtc = Convert.ToDateTime(depTime).AddHours(dst).ToString("HH:mm")
            '    tmp = Convert.ToDateTime(depTime).AddHours(dst).ToString("dd-MM-yyyy")
            '    tmp = tmp & " " & horaUtc
            '    tmp = Convert.ToDateTime(tmp).AddMinutes(-25)
            '    tmp2 = Convert.ToDateTime(tmp).ToString("HH")
            '    objIniFile.WriteString("DateTimeSeason", "Hours", tmp2)
            '    tmp2 = Convert.ToDateTime(tmp).ToString("mm")
            '    objIniFile.WriteString("DateTimeSeason", "Minutes", tmp2)

            '    tmp = Convert.ToDateTime(Now).DayOfYear().ToString
            '    objIniFile.WriteString("DateTimeSeason", "Day", tmp)
            '    tmp = Convert.ToDateTime(Now).Year().ToString
            '    objIniFile.WriteString("DateTimeSeason", "Year", tmp)
            'End If
            'objIniFile.WriteString("SimVars.0", "Latitude", latText)
            'objIniFile.WriteString("SimVars.0", "Longitude", lonText)
            'objIniFile.WriteString("SimVars.0", "altitude", altText)
            'objIniFile.WriteString("SimVars.0", "Heading", hdgText)
            'objIniFile.WriteString("SimVars.0", "Pitch", frmPrincipal.lblPitch.Text)
            'objIniFile.WriteString("SimVars.0", "Bank", frmPrincipal.lblBank.Text)
            'If fueling = 0 Then
            '    For tmp3 = 0 To 10
            '        objIniFile.WriteString("Fuel.0", deposito(tmp3), "0")
            '    Next

            'Else
            '    For tmp3 = 0 To 10
            '        objIniFile.WriteString("Fuel.0", deposito(tmp3), porcentajeDeposito(tmp3).ToString("0.0"))
            '    Next
            'End If
            'CESAR: AQUI COMENZAMOS EL CALCULO DE DATOS DE LA CARGA DE PASAJEROS Y CARGO
            'Dim carga As Double
            'Dim plazas, stationcount As Short
            'Dim lista As String = ""
            'Dim desde As Short
            'carga = pax * 171 'numero de pasajeros 160 libras + 11 libras por maletas personales = 171 libras
            'carga += (pax * (fuelprice / 10)) * 110 ' le sumamos 110 libras por cada pax * (precio fuel /10) esto es un coeficiente para tener una referencia dependiento del precio y de los pax.
            'frmPrincipal.ListPruebas.Items.Add("Total Cargo: Kg. " & (carga * 0.45359237).ToString("0,0"))
            'frmPrincipal.ListPruebas.Items.Add("Importe Cargo: $ " & (carga * 0.45359237 * 15).ToString("0,0"))
            'stationcount = fsStationcount.Value
            'If stationcount > 2 Then
            '    plazas = stationcount - 2
            'Else
            '    plazas = stationcount
            'End If
            'carga = Format(carga / plazas, "00.00")
            'If stationcount > 2 Then
            '    lista = "171.0,171.0,"
            '    desde = 3
            'Else
            '    desde = 1
            'End If
            'For x = desde To stationcount
            '    If x < stationcount Then
            '        lista += Str(carga) & ","
            '    Else
            '        lista += Str(carga)
            '    End If
            'Next

            'objIniFile.WriteString("Payload.0", "PayloadList", lista.ToString)
            '

            '**************************************************

            'tmp = ""
            'FlushMemory()
            'While LTrim(RTrim(tmp)) <> LTrim(RTrim(priPathFlt))

            '    fsFltName.Value = priPathFlt
            '    FSUIPCConnection.Process("fltName")
            '    Threading.Thread.Sleep(1000)
            '    fsFltLoad.Value = 0
            '    FSUIPCConnection.Process()
            '    Threading.Thread.Sleep(1000)
            '    'FSUIPCConnection.Process("fltName")
            '    'fsFltName.Value = priPathFlt
            '    'Threading.Thread.Sleep(1000)
            '    'FSUIPCConnection.Process()
            '    'fsFltLoad.Value = 0
            '    tmp = fsFltName.Value.ToString
            '    Threading.Thread.Sleep(1000)

            'End While
            'MessageBox.Show("No pulse ACEPTAR hasta que no se haya cargado de nuevo el Simulador." + System.Environment.NewLine + "Se está efectuando la carga de combustible, cargo y pasaje." + System.Environment.NewLine + "Dependiendo de la Aeronave puede llevar más o menos tiempo." + System.Environment.NewLine + "ES IMPORTANTE, ESPERAR PACIENTEMENTE", "Cargando Pasaje. Espere...", MessageBoxButtons.OK, MessageBoxIcon.Information)
            'FSUIPCConnection.Process()
            'Do While fsPause.Value = 0
            '    FSUIPCConnection.Process()
            'Loop

            'tmp3 = 0
            'Do While fsViewControl.Value = 0
            '    If tmp3 = 0 Then
            '        frmPrincipal.ListPruebas.Items.Add("Wait...")
            '        frmPrincipal.ListPruebas.Refresh()
            '    End If
            '    tmp3 = 1
            'Loop

            If aircraftIcao = "" Then aircraftIcao = strAtcModelo
            frmPrincipal.lblAircraft.Text = aircraftIcao
            If conReserva Then
                frmPrincipal.ListPruebas.Items.Add("Aeronave FS= " & strAtcModelo & " Aeronave FP= " & aircraftIcao)
            Else
                frmPrincipal.ListPruebas.Items.Add("Aeronave FS= " & strAtcModelo)
            End If
            If strAtcModelo <> aircraftIcao And Left(strAtcModelo, Len(strAtcModelo) - 1) <> Left(aircraftIcao, Len(aircraftIcao) - 1) Then
                frmPrincipal.lstEventos.ForeColor = Color.Red
                'If aircraftIcao = "" Then
                '    frmPrincipal.lstEventos.Items.Add("ERROR : Aeronave " & strAtcModelo & ". No hay Plan de Vuelo")
                '    Exit Sub
                'End If
                frmPrincipal.lstEventos.Items.Add("ERROR : Aeronave " & strAtcModelo & " difiere del Plan de Vuelo")
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
    ' ***********************************
    ' *CESAR: Enviamos cada x tiempo, depende de estado, posicion y demás al server EVNA
    'Public Sub posicionMVS(ByVal piloto, ByVal lat, ByVal lon, ByVal depICAO, ByVal arrICAO, ByVal groundSpeed, ByVal flightNumber, ByVal registro, ByVal heading, ByVal altitude, ByVal depTime, ByVal route, ByVal status, ByVal url, ByVal fechaIniVuelo)
    Public Sub posicionMVS()
        Dim url As String = cnfmvsUrlMVS
        Dim piloto As String = cnfPiloto
        url += "/action.php/mvs_bbox"
        Try
            Const cadenaXML As String = "<?xml version=""1.0"" encoding='UTF-8'?>" & "<update><data>" & "</data>" & "<verify>" & "<pilotID>" & "</pilotID>" & "</verify>" & "<liveupdate>" & "<latitude>" & "</latitude>" & "<longitude>" & "</longitude>" & "<depICAO>" & "</depICAO>" & "<arrICAO>" & "</arrICAO>" & "<groundSpeed>" & "</groundSpeed>" & "<flightNumber>" & "</flightNumber>" & "<aircraft>" & "</aircraft>" & "<registration>" & "</registration>" & "<heading>" & "</heading>" & "<altitude>" & "</altitude>" & "<depTime>" & "</depTime>" & "<route>" & "</route>" & "<status>" & "</status>" & "<fechavuelo>" & "</fechavuelo>" & "<fechavuelo>" & "</fechavuelo>" & "<red>" & "</red>" & "</liveupdate></update>"

            parser = New MSXML2.DOMDocument
            ' cargar el código SOAP para CaF
            parser.loadXML(cadenaXML)


            parser.selectSingleNode("/update/data").text = "liveupdate"
            parser.selectSingleNode("/update/verify/pilotID").text = piloto
            parser.selectSingleNode("/update/liveupdate/latitude").text = lat
            parser.selectSingleNode("/update/liveupdate/longitude").text = lon
            parser.selectSingleNode("/update/liveupdate/depICAO").text = depICAO
            parser.selectSingleNode("/update/liveupdate/arrICAO").text = arrICAO
            parser.selectSingleNode("/update/liveupdate/groundSpeed").text = groundSpeed
            parser.selectSingleNode("/update/liveupdate/flightNumber").text = "MVS" & flightNumber
            parser.selectSingleNode("/update/liveupdate/aircraft").text = aircraftIcao
            parser.selectSingleNode("/update/liveupdate/registration").text = registro
            parser.selectSingleNode("/update/liveupdate/heading").text = heading
            parser.selectSingleNode("/update/liveupdate/altitude").text = altitude
            parser.selectSingleNode("/update/liveupdate/depTime").text = depTime
            parser.selectSingleNode("/update/liveupdate/route").text = route
            parser.selectSingleNode("/update/liveupdate/status").text = status
            parser.selectSingleNode("/update/liveupdate/fechavuelo").text = fechaIniVuelo
            parser.selectSingleNode("/update/liveupdate/red").text = "Evna"
            If esVueloIvao Then parser.selectSingleNode("/update/liveupdate/red").text = "Ivao"
            If esVueloVatsim Then parser.selectSingleNode("/update/liveupdate/red").text = "Vatsim"

            oHttReq = New MSXML2.XMLHTTP
            '
            ' Enviar el comando de forma síncrona (se espera a que se reciba la respuesta)
            oHttReq.open("POST", url, True)
            ' las cabeceras a enviar al servicio Web
            ' (no incluir los dos puntos en el nombre de la cabecera)
            oHttReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8")
            oHttReq.setRequestHeader("SOAPAction", "http://evna.vawiki.com")
            ' enviar el comando
            oHttReq.send(parser.xml)
        Catch ex As Exception
            frmPrincipal.lstEventos.Items.Clear()
            frmPrincipal.lstEventos.Items.Add("Se ha producido error: " & Err.Number.ToString & " al intentar conectar con " & url)
            MsgBox("Problema al conectar con " & url, MsgBoxStyle.Critical)
        End Try

    End Sub
    Public Sub enviarReporteEvna()
        Dim url As String = cnfmvsUrlMVS
        Dim piloto As String = cnfPiloto
        Dim reserva As String = ""
        If horaFinEvna = "" And status.ToString <> "CRASH" Then Exit Sub
        reserva = IIf(conReserva = False, "NO", "SI")


        Dim fsVs0 As Offset(Of Double) = New FSUIPC.Offset(Of Double)(&H538)
        url += "/action.php/mvs_bbox"
        Try
            Const cadenaXML As String = "<?xml version=""1.0"" encoding='UTF-8'?><update><data></data><verify><pilotID></pilotID></verify>" & _
            "<report><reserva></reserva><latitude></latitude><longitude></longitude><depICAO></depICAO><arrICAO></arrICAO>" & "<groundSpeed></groundSpeed><flightNumber></flightNumber><registration></registration><heading></heading><altitude></altitude>" & "<depTime></depTime><route></route><status></status><fechavuelo></fechavuelo><ias></ias><pitch></pitch><gear></gear>" & "<vspeed></vspeed><bank></bank><stall></stall><overspeed></overspeed><vs0></vs0><landingrate></landingrate><pax></pax><zfw></zfw>" & "<pesototal></pesototal><blockfuel></blockfuel><fueling></fueling><fob></fob><fuelprice></fuelprice><burnoff></burnoff>" & "<horaini></horaini><horafin></horafin><nm></nm><horautcsim></horautcsim><idpilotoivao></idpilotoivao>" & "<fechavuelosalidaivao></fechavuelosalidaivao><horasalidaivao></horasalidaivao><fechavuelollegadaivao></fechavuelollegadaivao><horallegadaivao></horallegadaivao></report></update>"
            parser = New MSXML2.DOMDocument
            ' cargar el código SOAP para CaF
            parser.loadXML(cadenaXML)
            'CESAR: Estos datos se pasan haya o no haya reserva previa (cabecera)
            parser.selectSingleNode("/update/data").text = "report"
            parser.selectSingleNode("/update/verify/pilotID").text = piloto
            parser.selectSingleNode("/update/report/reserva").text = reserva
            '***************************
            If conReserva Or status.ToString = "CRASH" Then
                parser.selectSingleNode("/update/report/latitude").text = lat
                parser.selectSingleNode("/update/report/longitude").text = lon
                parser.selectSingleNode("/update/report/depICAO").text = depICAO
                parser.selectSingleNode("/update/report/arrICAO").text = arrICAO
                parser.selectSingleNode("/update/report/groundSpeed").text = Int(Val(groundSpeed) + 0.5).ToString
                parser.selectSingleNode("/update/report/flightNumber").text = flightNumber
                parser.selectSingleNode("/update/report/registration").text = registro
                parser.selectSingleNode("/update/report/heading").text = heading
                parser.selectSingleNode("/update/report/altitude").text = altitude
                parser.selectSingleNode("/update/report/depTime").text = depTime
                parser.selectSingleNode("/update/report/route").text = route
                parser.selectSingleNode("/update/report/status").text = status
                parser.selectSingleNode("/update/report/fechavuelo").text = fechaIniVuelo

                parser.selectSingleNode("/update/report/ias").text = Int(Val(frmPrincipal.lblIAS.Text) + 0.5).ToString
                parser.selectSingleNode("/update/report/pitch").text = Int(Val(frmPrincipal.lblPitch.Text) + 0.5).ToString
                parser.selectSingleNode("/update/report/gear").text = frmPrincipal.lblGear.Text
                parser.selectSingleNode("/update/report/vspeed").text = Int(Val(frmPrincipal.lblVSpeed.Text) + 0.5).ToString
                parser.selectSingleNode("/update/report/bank").text = Int(Val(frmPrincipal.lblBank.Text) + 0.5).ToString
                parser.selectSingleNode("/update/report/stall").text = frmPrincipal.lblStall.Text
                parser.selectSingleNode("/update/report/overspeed").text = frmPrincipal.lblOverSpeed.Text
                FSUIPCConnection.Process()
                parser.selectSingleNode("/update/report/vs0").text = fsVs0.Value.ToString



                parser.selectSingleNode("/update/report/pax").text = pax.ToString
                parser.selectSingleNode("/update/report/zfw").text = frmPrincipal.lblZeroFuel.Text
                parser.selectSingleNode("/update/report/pesototal").text = frmPrincipal.lblPesoTotal.Text
                parser.selectSingleNode("/update/report/blockfuel").text = frmPrincipal.lblCombustibleInicial.Text
                parser.selectSingleNode("/update/report/fueling").text = frmPrincipal.upFueling.Text
                parser.selectSingleNode("/update/report/fob").text = frmPrincipal.lblCombustible.Text
                parser.selectSingleNode("/update/report/fuelprice").text = fuelprice.ToString
                parser.selectSingleNode("/update/report/burnoff").text = frmPrincipal.lblBurnOffFuel.Text

                parser.selectSingleNode("/update/report/horaini").text = horaIniEvna
                parser.selectSingleNode("/update/report/horafin").text = horaFinEvna
                parser.selectSingleNode("/update/report/nm").text = frmPrincipal.lblNMRecorridas.Text
                parser.selectSingleNode("/update/report/horautcsim").text = frmPrincipal.lblHoraUTCSim.Text
            End If
            'CESAR: Estos datos se pasan haya o no haya reserva previa
            If dateIVAO = "" Then dateIVAO = Format(Now(), "dd-MM-yyyyHH:mm:ss") ' "HH:mm:ss") '"23-02-196007:00:00"
            If dateIVAO2 = "" Then dateIVAO2 = Format(Now(), "dd-MM-yyyyHH:mm:ss")
            Dim fechahora As String = dateIVAO.Substring(0, 2) & dateIVAO.Substring(3, 2) & dateIVAO.Substring(6)
            Dim fechahora2 As String = dateIVAO2.Substring(0, 2) & dateIVAO2.Substring(3, 2) & dateIVAO2.Substring(6)


            parser.selectSingleNode("/update/report/idpilotoivao").text = cnfIVAO.ToString
            parser.selectSingleNode("/update/report/fechavuelosalidaivao").text = fechahora.Substring(0, 8)
            parser.selectSingleNode("/update/report/horasalidaivao").text = fechahora.Substring(8, 5)
            parser.selectSingleNode("/update/report/fechavuelollegadaivao").text = fechahora2.Substring(0, 8)
            parser.selectSingleNode("/update/report/horallegadaivao").text = fechahora2.Substring(8, 5)
            If landingrate.ToString <> "" Then
                parser.selectSingleNode("/update/report/landingrate").text = Int(Val(landingrate.ToString) + 0.5).ToString
            Else
                parser.selectSingleNode("/update/report/landingrate").text = ""
            End If

            If status.ToString = "CRASH" Then parser.selectSingleNode("/update/report/landingrate").text = "CRASH"
            '
            ' Enviar el comando de forma síncrona (se espera a que se reciba la respuesta)
            oHttReq = New MSXML2.XMLHTTP
            oHttReq.open("POST", url, False) 'false espera respuesta
            ' las cabeceras a enviar al servicio Web
            ' (no incluir los dos puntos en el nombre de la cabecera)
            oHttReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8")
            oHttReq.setRequestHeader("SOAPAction", "http://evna.vawiki.com")
            ' enviar el comando
            oHttReq.send(parser.xml)
            '**************************
            '*****RESPUESTA DESDE EVNA
            ' Poner los datos en el analizador de XML
            parser.loadXML(oHttReq.responseText)
            'Este debe de ser el texto recibido para login correcto <sitedata><info><procesadoReport></procesadoReport>
            '<mensaje></mensaje></info></sitedata>
            Dim mensaje As String = ""
            'If conReserva Then
            Select Case parser.selectSingleNode("/sitedata/info/procesadoReport").text
                Case "0"
                    frmPrincipal.lstEventos.Items.Add("No se ha realizado el vuelo reservado")
                    mensaje = "Reporte rechazado, motivo:" & vbCrLf & parser.selectSingleNode("/sitedata/info/mensaje").text
                Case "1"
                    frmPrincipal.lstEventos.Items.Add("Reporte enviado y procesado.")
                    mensaje = parser.selectSingleNode("/sitedata/info/mensaje").text
                Case "5"
                    frmPrincipal.lstEventos.Items.Add("No localizado reporte IVAO en BD EVNA")
                    mensaje = "Reporte no localizado en EVNA:" & vbCrLf & parser.selectSingleNode("/sitedata/info/mensaje").text
                Case "9"
                    frmPrincipal.lstEventos.Items.Add("Error al procesar Reporte")
                    mensaje = "Error al procesar Reporte"


            End Select
            MsgBox(mensaje, MsgBoxStyle.Information)
            ' End If

        Catch ex As Exception
            frmPrincipal.lstEventos.Items.Clear()
            frmPrincipal.lstEventos.Items.Add("Se ha producido error: " & Err.Number.ToString & " al intentar conectar con " & url)
            MsgBox(Err.Number.ToString & " Problema al conectar con " & url, MsgBoxStyle.Critical)
        End Try
        fsVs0.Disconnect()
    End Sub
    Public Sub getFaseVuelo()
        Static altitud, temp As Integer
        Static viento, direccionViento As Integer
        Dim minutos As Short
        Dim horas As String
        Static landing As Boolean
        Static statusAnterior As String = ""
        Static engineFire As Boolean

        engineFire = IIf(frmPrincipal.lblEngineFire.Text = "1", True, False)
        '*******************************
        ' CALZOS PUESTOS COMIENZO y FINAL VUELO. PONEMOS CALZOS FIN DE VUELO CAPTURAMOS HH:MM. 
        '*******************************
        If fsOnGround.Value = 1 And fsParkingBrake.Value = 255 Then
            status = "ON BLOCK"
            frmPrincipal.lblParkingBrake.Text = "ON"
            If enVuelo = True Then 'Venimos de volar 8-)
                'horas = Format(Date.UtcNow, "HH")
                'minutos = Val(Format(Date.UtcNow, "mm"))
                'minutos = Int(minutos / 5) * 5
                'horaFinEvna = horas & ":" & minutos.ToString.PadLeft(2, "0")
                horaFinEvna = frmPrincipal.lblHoraUTCSim.Text
                frmPrincipal.lblHoraFinVUelo.Text = horaFinEvna
                frmPrincipal.pbLedReporte.Image = Global.MVSBBoxNETFSX.Resources.ledverde1
                frmPrincipal.pbLedInforme.Image = Global.MVSBBoxNETFSX.Resources.ledverde1
                frmPrincipal.pbLedReporte.Refresh()

                enVuelo = False
                frmPrincipal.Timer1.Enabled = False
                frmPrincipal.Timer2.Enabled = False

                ''enviarReporteEvna()
            End If
        End If

        '*******************************
        ' CALZOS FUERA COMIENZO CAPTURAMOS HH:MM y TERMINADO VUELO
        '*******************************
        If engineFire And fsOnGround.Value = 1 And fsParkingBrake.Value = 0 Then
            If horaIniEvna = "" Then
                status = "OFF-BLOCK"
            Else

                status = "ON GROUND"
            End If
            frmPrincipal.lblParkingBrake.Text = "OFF"
            If horaIniEvna = "" And frmPrincipal.lblEngineFire.Text = "1" Then
                'horas = Format(Date.UtcNow, "HH")
                'minutos = Val(Format(Date.UtcNow, "mm"))
                'minutos = Int(minutos / 5) * 5
                'horaIniEvna = horas & ":" & minutos.ToString.PadLeft(2, "0")
                horaIniEvna = frmPrincipal.lblHoraUTCSim.Text
                frmPrincipal.lblInicioVuelo.Text = horaIniEvna
                frmPrincipal.pbLedReporte.Image = Global.MVSBBoxNETFSX.Resources.ledrojo1
                frmPrincipal.pbLedInforme.Image = Global.MVSBBoxNETFSX.Resources.ledrojo1
                frmPrincipal.pbLedReporte.Refresh()
            End If
        End If

        '*******************************
        ' RODANDO Y PUSHBACK
        '*******************************
        If (groundSpeed > 3 And groundSpeed < 30) And fsPushBackEstado.Value = 3 And fsOnGround.Value = 1 Then
            status = "TAXIING"
        End If
        If fsPushBackEstado.Value < 3 Then
            status = "PUSH-BACK"
        End If

        '*******************************
        ' TAKE-OFF CAPTURAMOS HH:MM PARA REPORTE IVAO
        '*******************************
        If verticalSpeed > 10 And (altitudeAGL > 69 And (enVuelo = False)) Then
            status = "TAKEOFF"
            enVuelo = True
            landing = False
            If horaIniIvao = "" Then
                horas = Format(Date.UtcNow, "HH")
                minutos = Val(Format(Date.UtcNow, "mm"))
                minutos = Int(minutos / 5) * 5
                horaIniIvao = horas & ":" & minutos.ToString.PadLeft(2, "0")
                dateIVAO = Format(Date.UtcNow, "d")
                fechaIniVuelo = dateIVAO
                dateIVAO += horaIniIvao & ":00"
                horaFinIvao = ""
            End If
        End If

        '*******************************
        ' TOUCHDOWN CAPTURAMOS HH:MM PARA REPORTE IVAO
        '*******************************
        If enVuelo = True And fsOnGround.Value = 1 And fsParkingBrake.Value = 0 And landing = False Then
            status = "TOUCHDOWN"
            landing = True
            If horaFinIvao = "" Then
                horas = Format(Date.UtcNow, "HH")
                minutos = Val(Format(Date.UtcNow, "mm"))
                minutos = Int(minutos / 5) * 5
                horaFinIvao = horas & ":" & minutos.ToString.PadLeft(2, "0")
                dateIVAO2 = Format(Date.UtcNow, "d")
                landingtime = horaFinIvao & ":00"
                dateIVAO2 += landingtime
                landingrate = frmPrincipal.lblVSpeed.Text

                'BENJA 22/05/2012
                'TOMA BRUSCA : -10 puntos
                If Int(Val(landingrate.ToString) + 0.5) < 100 Then
                    'fin BENJA
                    Dim row As String() = New String() {frmInformeDelVuelo.lblTotalPenalizaciones().Text + 1, "5", frmPrincipal.lblHoraUTCPc.Text, frmPrincipal.lblHoraUTCSim.Text, "-10", "TOMA BRUSCA > 100ft", frmPrincipal.lblPosicion.Text}
                    frmInformeDelVuelo.DGInformeDelVuelo().Rows.Add(row)
                    frmInformeDelVuelo.lblTotalPenalizaciones().Text = frmInformeDelVuelo.lblTotalPenalizaciones().Text + 1
                    frmInformeDelVuelo.lblPuntuacion().Text = Val(frmInformeDelVuelo.lblPuntuacion().Text) - 10
                End If
            End If
        End If
        If verticalSpeed > 80 And altitudeAGL > 300 Then
            temp = altitudeAGL.ToString
            If (temp - altitud) > 100 Then
                status = "CLIMB"
                enVuelo = True
                landing = False
            End If
        End If

        '*****************************
        'TOUCH AND GO
        '*****************************
        If verticalSpeed > 80 And altitudeAGL > 90 And landing = True And horaFinIvao <> "" Then
            status = "TOUCH & GO"
            landing = False
            horaFinIvao = ""
        End If


        If altitudeAGL > 300 And (verticalSpeed < 80 And verticalSpeed > -80) Then
            status = "CRUISE"
            altitud = frmPrincipal.lblAGL.Text
            If viento < fsWindSpeed.Value Then

                viento = fsWindSpeed.Value
                direccionViento = Int(fsWindDirec.Value * 360 / 65536)
                Dim a = direccionViento - CInt(heading)
                Dim b = Math.Sin(a) * viento
                Dim c = Math.Cos(a) * viento
                If c < 0 Then
                    frmPrincipal.label17.Text = "T/W:"
                Else
                    frmPrincipal.label17.Text = "H/W:"
                End If
                frmPrincipal.lblWindMax.Text = Math.Abs(c).ToString("0")
            End If
        End If

        If verticalSpeed < -80 Then
            temp = altitudeAGL.ToString
            If (altitud - temp) > 100 Then
                status = "DESCENT"
            End If

        End If

        'ACTUALIZAMOS ETIQUETA En Tierra
        If status <> statusAnterior Then
            frmPrincipal.lstEventos.Items.Add(frmPrincipal.lblHoraUTCPc.Text & "@" & frmPrincipal.lblHoraUTCSim.Text & "@" & status)
            statusAnterior = status
        End If
        frmPrincipal.lblEnTierra.Text = status
    End Sub

    'Public Sub getFaseVuelo_antes()
    '    'Estado
    '    Static altitud, temp As Integer
    '    Static landing As Boolean
    '    Dim hora, min, minp As String
    '    If fsOnGround.Value = 1 Then
    '        If fsParkingBrake.Value = 255 And fsPushBackEstado.Value < 3 Then
    '            fsPushBackControl.Value = 3
    '            frmPrincipal.ListPruebas.Items.Add("Pushback => Parking Break")
    '        End If
    '    Else
    '        If verticalSpeed > 10 And (altitudeAGL < 300 And altitudeAGL > 15 And (enVuelo = False)) Then
    '            status = "AIRBORNE"
    '            landing = False
    '            airbornetime = Format(Date.UtcNow, "HH:mm:ss")
    '            hora = airbornetime.Substring(0, 2)
    '            min = airbornetime.Substring(4, 1)
    '            minp = airbornetime.Substring(3, 1)
    '            If Val(min) > 2 And Val(min) < 8 Then min = "5"
    '            If Val(min) > 0 And Val(min) < 3 Then min = "0"
    '            If Val(min) > 7 Then
    '                min = "0"
    '                minp = (Val(minp) + 1).ToString
    '                If minp = "6" Then
    '                    minp = "0"
    '                    hora = (Val(hora) + 1).ToString
    '                    If hora = "24" Then hora = "00"
    '                End If
    '            End If
    '            airbornetime = hora & ":" & minp & min & ":00"
    '            dateIVAO = Format(Date.UtcNow, "d")
    '            fechaIniVuelo = dateIVAO
    '            dateIVAO += airbornetime
    '        End If

    '        If verticalSpeed > 80 And altitudeAGL > 300 Then
    '            temp = altitudeAGL.ToString
    '            If (temp - altitud) > 100 Then
    '                status = "CLIMB"
    '                enVuelo = True
    '                landing = False
    '            End If
    '        End If

    '        If altitudeAGL > 300 And (verticalSpeed < 80 And verticalSpeed > -80) Then
    '            status = "CRUISE"
    '            altitud = frmPrincipal.lblAGL.Text
    '        End If

    '        If verticalSpeed < -80 Then
    '            temp = altitudeAGL.ToString
    '            If (altitud - temp) > 100 Then
    '                status = "DESCENT"
    '            End If

    '        End If

    '        If frmPrincipal.lblEnTierra.Text <> status Then frmPrincipal.lstEventos.Items.Add(frmPrincipal.lblHoraUTCPc.Text & "=> " & frmPrincipal.lblHoraUTCSim.Text & "=> " & status)
    '        frmPrincipal.lblEnTierra.Text = status

    '    End If
    '    If enVuelo = True And fsOnGround.Value = 1 And fsParkingBrake.Value = 0 And landing = False Then
    '        status = "LANDED"
    '        landingtime = Format(Date.UtcNow, "HH:mm:ss")
    '        frmPrincipal.lstEventos.Items.Add(landingtime & "=> " & frmPrincipal.lblHoraUTCSim.Text & "=> LANDED ON GROUND")
    '        frmPrincipal.lstEventos.Items.Add(landingtime & "=> " & frmPrincipal.lblHoraUTCSim.Text & "=> " & frmPrincipal.lblVSpeed.Text)
    '        landingrate = frmPrincipal.lblVSpeed.Text
    '        dateIVAO2 = Format(Date.UtcNow, "d")
    '        dateIVAO2 += landingtime
    '        landing = True
    '        enVuelo = False
    '    End If
    '    If fsOnGround.Value = 1 And fsParkingBrake.Value = 0 Then
    '        frmPrincipal.lblParkingBrake.Text = "OFF"
    '        status = "ON GROUND"
    '        'If depTimeReal = "" Then
    '        '    depTimeReal = frmPrincipal.lblHoraUTCPc.Text
    '        '    frmPrincipal.lblInicioVuelo.Text = depTimeReal
    '        '    frmPrincipal.lstEventos.Items.Add(depTimeReal & "=> " & frmPrincipal.lblHoraUTCSim.Text & "=> CALZOS OFF")
    '        'End If
    '        If fsPushBackEstado.Value < 3 Then status = "PUSHBACK"
    '        If (groundSpeed > 3 And groundSpeed < 30) And fsPushBackEstado.Value = 3 Then
    '            status = "TAXIING"
    '        End If

    '        If groundSpeed > 30 Then
    '            status = "ROLLING"
    '        End If
    '        frmPrincipal.lblEnTierra.Text = status
    '    End If
    '    If fsOnGround.Value = 1 And fsParkingBrake.Value = 255 Then
    '        status = "ON BLOCK"
    '        frmPrincipal.lblEnTierra.Text = status
    '        frmPrincipal.lblParkingBrake.Text = "ON"
    '        If enVuelo Then
    '            frmPrincipal.lstEventos.Items.Add(frmPrincipal.lblHoraUTCPc.Text & "=> " & frmPrincipal.lblHoraUTCSim.Text & "=> CALZOS ON")
    '            frmPrincipal.lblHoraFinVUelo.Text = frmPrincipal.lblHoraUTCPc.Text
    '            enVuelo = False

    '        End If

    '    End If

    'End Sub
    ''' <summary>
    ''' Calculo porcentajes tanques
    ''' y llenado de los mismos con fueling 
    ''' Fueling se obtiene de el control de carga y al principio con el fuel que habia en el A/V enviado por EVNA
    ''' </summary>
    ''' <remarks>este es el remark</remarks>
    Private Sub cargafuel()
        Dim cadauno As Single 'Capacidad de tanques paralelos cada uno de ellos por ejemplo alas
        Dim suma As Single, resto As Single

        resto = fueling
        If resto = 0 Then Exit Sub
        resto = resto / 0.45359237D / (fsFuelWeight.Value / 256)  'para pasar a Kg a lbs y a Gallons
        'Sumamos las capacidades totales de los 2 depositos de las alas (primeros a llenar)
        FSUIPCConnection.Process()
        suma = Capacidad(1) + Capacidad(2)
        If suma > 0 Then 'Hay depositos en las alas
            cadauno = resto / 2
            porcentajeDeposito(1) = (cadauno * 100) / Capacidad(1)
            resto = resto - suma
            If resto < 0 Then resto = 0
            If porcentajeDeposito(1) > 100 Then
                porcentajeDeposito(1) = 100
                porcentajeDeposito(2) = 100
            Else
                porcentajeDeposito(2) = porcentajeDeposito(1)
            End If
            fsFuelLeftMainPorcentaje.Value = porcentajeDeposito(1) / 100 * (128 * 65536)
            fsFuelRightMainPorcentaje.Value = porcentajeDeposito(2) / 100 * (128 * 65536)
            If resto = 0 Then Exit Sub
        End If

        suma = Capacidad(0)
        If suma > 0 Then 'Hay deposito central
            cadauno = resto
            porcentajeDeposito(0) = (cadauno * 100) / Capacidad(0)
            resto = resto - suma
            If resto < 0 Then resto = 0
            If porcentajeDeposito(0) > 100 Then
                porcentajeDeposito(0) = 100
            End If
            fsFuelCenterPorcentaje.Value = porcentajeDeposito(0) / 100 * (128 * 65536)
            If resto = 0 Then Exit Sub
        End If

        suma = Capacidad(3) + Capacidad(4) 'Auxiliares izquierda derecha
        If suma > 0 Then 'Hay depositos auxiliares
            cadauno = resto / 2
            porcentajeDeposito(3) = (cadauno * 100) / Capacidad(3)
            resto = resto - suma
            If resto < 0 Then resto = 0
            If porcentajeDeposito(3) > 100 Then
                porcentajeDeposito(3) = 100
                porcentajeDeposito(4) = 100
            Else
                porcentajeDeposito(4) = porcentajeDeposito(3)
            End If
            fsFuelLeftAuxPorcentaje.Value = porcentajeDeposito(3) / 100 * (128 * 65536)
            fsFuelRightAuxPorcentaje.Value = porcentajeDeposito(4) / 100 * (128 * 65536)
            If resto = 0 Then Exit Sub
        End If

        suma = Capacidad(5) + Capacidad(6) 'Tip izquierda derecha
        If suma > 0 Then 'Hay depositos Tips
            cadauno = resto / 2
            porcentajeDeposito(5) = (cadauno * 100) / Capacidad(5)
            resto = resto - suma
            If resto < 0 Then resto = 0
            If porcentajeDeposito(5) > 100 Then
                porcentajeDeposito(5) = 100
                porcentajeDeposito(6) = 100
            Else
                porcentajeDeposito(6) = porcentajeDeposito(5)
            End If
            fsFuelLeftTipPorcentaje.Value = porcentajeDeposito(5) / 100 * (128 * 65536)
            fsFuelRightTipPorcentaje.Value = porcentajeDeposito(6) / 100 * (128 * 65536)
            If resto = 0 Then Exit Sub
        End If

        suma = Capacidad(7)
        If suma > 0 Then 'Hay deposito central 2
            cadauno = resto
            porcentajeDeposito(7) = (cadauno * 100) / Capacidad(7)
            resto = resto - suma
            If resto < 0 Then resto = 0
            If porcentajeDeposito(7) > 100 Then
                porcentajeDeposito(7) = 100
            End If
            fsFuelCenter2Porcentaje.Value = porcentajeDeposito(7) / 100 * (128 * 65536)
            If resto = 0 Then Exit Sub
        End If

        suma = Capacidad(8)
        If suma > 0 Then 'Hay deposito central 3
            cadauno = resto
            porcentajeDeposito(8) = (cadauno * 100) / Capacidad(8)
            resto = resto - suma
            If resto < 0 Then resto = 0
            If porcentajeDeposito(8) > 100 Then
                porcentajeDeposito(8) = 100
            End If
            fsFuelCenter3Porcentaje.Value = porcentajeDeposito(8) / 100 * (128 * 65536)
            If resto = 0 Then Exit Sub
        End If

        suma = Capacidad(9)
        If suma > 0 Then 'Hay deposito Externo 1
            cadauno = resto
            porcentajeDeposito(9) = (cadauno * 100) / Capacidad(9)
            resto = resto - suma
            If resto < 0 Then resto = 0
            If porcentajeDeposito(9) > 100 Then
                porcentajeDeposito(9) = 100
            End If
            fsFuelExternal1Porcentaje.Value = porcentajeDeposito(9) / 100 * (128 * 65536)
            If resto = 0 Then Exit Sub
        End If

        suma = Capacidad(10)
        If suma > 0 Then 'Hay deposito Externo 2
            cadauno = resto
            porcentajeDeposito(10) = (cadauno * 100) / Capacidad(10)
            resto = resto - suma
            If resto < 0 Then resto = 0
            If porcentajeDeposito(10) > 100 Then
                porcentajeDeposito(10) = 100
            End If
            fsFuelExternal2Porcentaje.Value = porcentajeDeposito(10) / 100 * (128 * 65536)
            If resto = 0 Then Exit Sub
        End If


    End Sub
    Private Sub fuelacero()
        FSUIPCConnection.Process()
        fsFuelLeftMainPorcentaje.Value = 0
        fsFuelRightMainPorcentaje.Value = 0
        fsFuelCenterPorcentaje.Value = 0
        fsFuelLeftAuxPorcentaje.Value = 0
        fsFuelRightAuxPorcentaje.Value = 0
        fsFuelLeftTipPorcentaje.Value = 0
        fsFuelRightTipPorcentaje.Value = 0
        fsFuelCenter2Porcentaje.Value = 0
        fsFuelCenter3Porcentaje.Value = 0
        fsFuelExternal1Porcentaje.Value = 0
        fsFuelExternal2Porcentaje.Value = 0
        FSUIPCConnection.Process()

    End Sub
    Public Sub calculapeso()
        Dim carga As Long
        Dim cadaEstacion As Long
        Dim resto As Integer
        estaciones = fsStationcount.Value
        Dim myPayload(estaciones) As FSUIPC.Offset(Of Byte())
        Dim myArray(estaciones) As Double
        For n = 0 To estaciones
            myPayload(n) = New FSUIPC.Offset(Of Byte())(&H1400 + (&H30 * (n - 1)), 8)
        Next
        FSUIPCConnection.Process()
        For n = 0 To estaciones - 1
            myArray(n) = BitConverter.ToDouble(myPayload(n + 1).Value, 0)
        Next

        Dim dblarr() As Double = {0}
        dblarr(0) = myArray(1)
        Dim test() As Byte = Array.CreateInstance(GetType(Byte), Buffer.ByteLength(dblarr))


        carga = pax * 171 'numero de pasajeros 160 libras + 11 libras por maletas personales = 171 libras
        carga += (pax * (fuelprice / 10)) * 110 ' le sumamos 110 libras por cada pax * (precio fuel /10) esto es un coeficiente para tener una referencia dependiento del precio y de los pax.
        frmPrincipal.ListPruebas.Items.Add("Total Cargo: Kg. " & (carga * 0.45359237).ToString("0,0"))
        frmPrincipal.ListPruebas.Items.Add("Importe Cargo: $ " & (carga * 0.45359237 * 15).ToString("0,0"))

        cadaEstacion = carga / estaciones
        resto = carga - (cadaEstacion * estaciones)
        Buffer.BlockCopy(BitConverter.GetBytes(CDbl(cadaEstacion)), 0, test, 0, Buffer.ByteLength(BitConverter.GetBytes(CDbl(cadaEstacion))))
        For n = 1 To estaciones
            If n = estaciones And resto > 0 Then
                Buffer.BlockCopy(BitConverter.GetBytes(CDbl(cadaEstacion + resto)), 0, test, 0, Buffer.ByteLength(BitConverter.GetBytes(CDbl(cadaEstacion + resto))))
            End If
            myPayload(n).Value = test
            FSUIPCConnection.Process()
        Next

        For n = 0 To estaciones
            myPayload(n).Disconnect()
        Next

    End Sub




End Module
